// 网络请求工具
import router from "@/router"
import auth from '@/utils/auth'
import axios from 'axios'
//创建一个新的axios实例,进行配置(好处:搞多个axios实例,对接多个服务)
//将来所有的配置都在instance进行,使用也是使用这个实例它也是axios
const instance = axios.create({
  baseURL: 'http://geek.itheima.net/',
  timeout: 5000
})
//导出新的axios
export default instance

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});


instance.interceptors.request.use(config => {
  // 发请求前就会执行
  // config 请求配置
  // 对config进行修改
  const token = auth.getToken()
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
}, err => {
  // 当前一个函数报错的时候
  // 一定需要返回一个错误的promise对象
  return Promise.reject(err)
})

//添加响应拦截器
instance.interceptors.response.use(res => res, err => {
  //当后台报错且状态码401,代表:登录失效或者未登录
  if (err.response && err.response.status === 401) {
    //删除无效token 
auth.delToken()
    //跳转到登录页面
    router.push('/login')
    //this.$router.push('/login')  这里 this 不是vue 实例 不能使用$router
    //location.href='/#/login' 切换地址 不是通过路由方式切换,这导致router的某些功能失效
    //router/index.js  导出的router实例, 挂载到vue上就是$router

  }
  return Promise.reject(err)
})
